home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 January: Mac OS SDK / Dev.CD Jan 00 SDK2.toast / What's New / • What was new 11⁄99 / Sample Code / Overview / Optimization TN Demos / CBuffFileStream / CTestJig.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-09-13  |  4.8 KB  |  241 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        CTestJig.c
  3.  
  4.     Contains:    Test Jig.
  5.  
  6.     Written by:    Steve Bollinger
  7.  
  8.     Copyright:    Copyright (c) 1999 Apple Computer, Inc., All Rights Reserved.
  9.  
  10.                 You may incorporate this Apple sample source code into your program(s) without
  11.                 restriction. This Apple sample source code has been provided "AS IS" and the
  12.                 responsibility for its operation is yours. You are not permitted to redistribute
  13.                 this Apple sample source code as "Apple sample source code" after having made
  14.                 changes. If you're going to re-distribute the source, we require that you make
  15.                 it clear in the source that the code was descended from Apple sample source
  16.                 code, but that you've made changes.
  17.  
  18. */
  19.  
  20. #include <Types.h>
  21. #include <Files.h>
  22. #include <Errors.h>
  23. #include <Script.h>
  24. #include <LowMem.h>
  25.  
  26. #include <stdio.h>
  27.  
  28. #include "CBuffFileStream.h"
  29. #include "CTestJig.h"
  30.  
  31. // Changing BUFFERED from 1 to 0 will use the file system directly
  32. // to test speedups.
  33.  
  34. #define BUFFERED 1
  35.  
  36. // Setting CHECKCONTENTS to 1 will do some rudimentary verification
  37. // of the data actually read.
  38. #define CHECKCONTENTS    0
  39.  
  40. unsigned long DoWriteTest(void)
  41. {
  42.     unsigned long            startTicks;
  43.     unsigned long            endTicks;
  44.  
  45.     unsigned long            *writeamts;
  46.     unsigned long            numwriteamts;
  47.     FILE                    *rdfile;
  48.     unsigned long            iter;
  49.     OSErr                    ckErr;
  50. #if BUFFERED
  51.     CBuffFileStreamData        *newdata;
  52. #else
  53.     short                    filenum;
  54. #endif
  55.     FSSpec                    fileLoc;
  56.     unsigned long            largestrandvalue = 100000;
  57.     unsigned long            *wrSpace;
  58.  
  59.     rdfile = fopen("sizelist","r");
  60.  
  61.     fscanf(rdfile,"%lu\n",&numwriteamts);
  62.  
  63.     writeamts = (unsigned long *) NewPtr(sizeof(unsigned long) * numwriteamts);
  64.  
  65.     for (iter = 0; iter < numwriteamts; iter++)
  66.     {
  67.         fscanf(rdfile,"%lu\n",&(writeamts[iter]));
  68.     }
  69.  
  70.     fclose(rdfile);
  71.  
  72. // now we have the data we need
  73.  
  74. // make a buffer to write from
  75.     wrSpace = (unsigned long *) NewPtrClear(largestrandvalue);
  76.     if (0 == wrSpace)
  77.         return 0;
  78.  
  79. // create a spec to the file to open
  80.     ckErr = FSMakeFSSpec(0,0,"\ptestfile",&fileLoc);
  81.     if (fnfErr == ckErr)
  82.         (void) FSpCreate(&fileLoc,0,0,smSystemScript);
  83.  
  84.     startTicks = LMGetTicks();    
  85.  
  86. #if BUFFERED
  87.     ckErr = BFSOpenFile(&newdata,&fileLoc,fsRdWrPerm);
  88.     if (noErr != ckErr)
  89.         return 0;
  90.  
  91.     for (iter = 0; iter < numwriteamts; iter++)
  92.     {
  93.         long            wrAmt = (long) writeamts[iter];
  94.  
  95.         *wrSpace = (unsigned long) wrAmt;
  96.  
  97.         ckErr = BFSWrite(newdata,&wrAmt,wrSpace);
  98.         if (noErr != ckErr)
  99.             return 0;
  100.     }
  101.  
  102.     ckErr = BFSCloseFile(newdata);
  103.     if (noErr != ckErr)
  104.         return 0;
  105. #else
  106.     ckErr = FSpOpenDF(&fileLoc,fsRdWrPerm,&filenum);
  107.     if (noErr != ckErr)
  108.         return 0;
  109.  
  110.     for (iter = 0; iter < numwriteamts; iter++)
  111.     {
  112.         long            wrAmt = (long) writeamts[iter];
  113.  
  114.         *wrSpace = (unsigned long) wrAmt;
  115.  
  116.         ckErr = FSWrite(filenum,&wrAmt,wrSpace);
  117.         if (noErr != ckErr)
  118.             return 0;
  119.     }
  120.  
  121.     ckErr = FSClose(filenum);
  122.     if (noErr != ckErr)
  123.         return 0;
  124. #endif
  125.  
  126.     endTicks = LMGetTicks();
  127.  
  128.     DisposePtr((Ptr) wrSpace);
  129.     DisposePtr((Ptr) writeamts);
  130.  
  131.     return endTicks - startTicks;
  132. }
  133.  
  134. unsigned long DoReadTest(void)
  135. {
  136.     unsigned long            startTicks;
  137.     unsigned long            endTicks;
  138.  
  139.     unsigned long            *readamts;
  140.     unsigned long            numreadamts;
  141.     FILE                    *rdfile;
  142.     unsigned long            iter;
  143.     OSErr                    ckErr;
  144. #if BUFFERED
  145.     CBuffFileStreamData        *newdata;
  146. #else
  147.     short                    filenum;
  148. #endif
  149.     FSSpec                    fileLoc;
  150.     unsigned long            largestrandvalue = 100000;
  151.     unsigned long            *rdSpace;
  152.  
  153.     rdfile = fopen("sizelist","r");
  154.  
  155.     fscanf(rdfile,"%lu\n",&numreadamts);
  156.  
  157.     readamts = (unsigned long *) NewPtr(sizeof(unsigned long) * numreadamts);
  158.  
  159.     for (iter = 0; iter < numreadamts; iter++)
  160.     {
  161.         fscanf(rdfile,"%lu\n",&(readamts[iter]));
  162.     }
  163.  
  164.     fclose(rdfile);
  165.  
  166. // now we have the data we need
  167.  
  168. // make a buffer to read to
  169.     rdSpace = (unsigned long *) NewPtrClear(largestrandvalue);
  170.     if (0 == rdSpace)
  171.         return 0;
  172.  
  173. // create a spec to the file to open
  174.     ckErr = FSMakeFSSpec(0,0,"\ptestfile",&fileLoc);
  175.     if (noErr != ckErr)
  176.         return 0;
  177.  
  178.     startTicks = LMGetTicks();    
  179.  
  180. #if BUFFERED
  181.     ckErr = BFSOpenFile(&newdata,&fileLoc,fsRdPerm);
  182.     if (noErr != ckErr)
  183.         return 0;
  184.  
  185.     for (iter = 0; iter < numreadamts; iter++)
  186.     {
  187.         long            rdAmt = (long) readamts[iter];
  188.  
  189. //        *rdSpace = (unsigned long) rdAmt;
  190.  
  191.         ckErr = BFSRead(newdata,&rdAmt,rdSpace);
  192.         if (noErr != ckErr)
  193.             return 0;
  194.  
  195. #if CHECKCONTENTS
  196.         if (readamts[iter] != *rdSpace)
  197.         {
  198.             DebugStr("\pread back not correct");
  199.         }
  200. #endif
  201.     }
  202.  
  203.     ckErr = BFSCloseFile(newdata);
  204.     if (noErr != ckErr)
  205.         return 0;
  206. #else
  207.     ckErr = FSpOpenDF(&fileLoc,fsRdPerm,&filenum);
  208.     if (noErr != ckErr)
  209.         return 0;
  210.  
  211.     for (iter = 0; iter < numreadamts; iter++)
  212.     {
  213.         long            rdAmt = (long) readamts[iter];
  214.  
  215. //        *rdSpace = (unsigned long) rdAmt;
  216.  
  217.         ckErr = FSRead(filenum,&rdAmt,rdSpace);
  218.         if (noErr != ckErr)
  219.             return 0;
  220.  
  221. #if CHECKCONTENTS
  222.         if (readamts[iter] != *rdSpace)
  223.         {
  224.             DebugStr("\pread back not correct");
  225.         }
  226. #endif
  227.     }
  228.  
  229.     ckErr = FSClose(filenum);
  230.     if (noErr != ckErr)
  231.         return 0;
  232. #endif
  233.  
  234.     endTicks = LMGetTicks();
  235.  
  236.     DisposePtr((Ptr) rdSpace);
  237.     DisposePtr((Ptr) readamts);
  238.  
  239.     return endTicks - startTicks;
  240. }
  241.